package com.rabbitmq.exchange.direct;

import com.rabbitmq.client.*;
import sun.applet.Main;

import javax.lang.model.element.NestingKind;
import javax.xml.ws.Action;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * 王琦
 * 2021/11/1
 */
public class Receive {
    public static void main(String[] args) {
        //连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.67.129");
        factory.setPort(5672);
        factory.setUsername("root");
        factory.setPassword("root");
        //连接对象
        Connection connection = null;
        //连接通道
        Channel channel = null;

        try {
            //创建连接
            connection = factory.newConnection();

            //连接通道
            channel = connection.createChannel();


            /**
             * 声明队列
             * 参数1 队列名称
             * 参数2 是否持久化
             * 参数3 是否排外 true表示排外
             * 参数4 是否自动删除 true表示自动
             * 参数5 队列属性设置
             */

            String queueName = "directQueue";
            channel.queueDeclare(queueName, true, false, true, null);

            /**
             * 交换机
             */
            String exchangeName ="directExchnge";
            channel.exchangeDeclare(exchangeName, "direct", true);

            /**
             * 队列
             */
            channel.queueBind(queueName, exchangeName, "directKey");
            String message = "测试消息";

            /**
             * 监听队列接收消息
             * 参数1 监听队列名称
             * 参数2 自动确认消息 true表示自动接收
             * 参数3 为回调
             */
            channel.basicConsume(queueName, true, new DefaultConsumer(channel) {


                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    //消息处理
                    String message = new String(body);
                    System.out.println(message);
                }
            });

            System.out.println("启动了消息接收---------" + message);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
    }
}
